package com.lin.operatorlogrecord.entity.annotation;

import com.lin.operatorlogrecord.entity.enums.LogTypeEnum;
import com.lin.operatorlogrecord.strategy.IOperateLogStrategy;

import java.lang.annotation.*;

/**
 * @Author: chenghao.lin
 * @Date: 2023/09/21
 * @Description: 操作日志的切点
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface OperatorLogAnnotation {

    /**
     * 生成操作日志内容策略类
     * @return
     */
    Class<? extends IOperateLogStrategy> iOperatorLogStrategy();

    /**
     * 表对应实体，支持多表
     * @return  表对应实体
     */
    Class<?>[] tableEntity();

    /**
     *  日志类型
     * @return 日志类型枚举
     */
    LogTypeEnum logType();

    /**
     * 前端请求对象，注解方法返回类型不支持Object，故要借助SPEL来获取前端传来的参数
     * 若是删除或查询操作，则是""，其他操作要自己指定
     * @return spring表达式
     */
    String requestObjSpel() default SpelInstance.BLANK;

    /**
     * 操作对象ID
     * 若是新增操作，则是""，若是查询操作，则是无，其他操作要自己指定
     * @return spring表达式
     */
    String operatorObjIdSpel() default SpelInstance.BLANK;


    class SpelInstance {
        private SpelInstance(){}
        private static final String BLANK = "";
        private static final String NO_CONTENT = "'无'";
    }


}
